library(tidyverse)
# remove all objects to start with clean environment
rm(list=ls())
load("W:/group_transbio/data/psycourse/231107_PsyCourse6.0_Pheno_Proposal_69_Schwarz.RData")
data <- prop
rm(prop)
hist_of_differences <- function(data, var1, var2) {
  var1 <- ensym(var1)  
  var2 <- ensym(var2)
  data %>%
    select(!!var1, !!var2) %>%
    filter(complete.cases(.)) %>%
    mutate(neg_change = !!var1 - !!var2) %>% 
    pull(neg_change) %>% 
    hist(main = paste("Histogram of",var1, "-",var2))
}

replace_na_and_integers <- function(x) {
  # Replace NA with "-"
  x[is.na(x)] <- "-"
  # Replace integers with "+"
  x[!is.na(x) & !is.na(as.numeric(x)) & x == as.integer(x)] <- "+"
  return(x)
}


Missing_pattern <- function(data, var1, var2, var3, var4) {
  var1 <- ensym(var1)
  var2 <- ensym(var2)
  var3 <- ensym(var3)
  var4 <- ensym(var4)
  data %>% 
    select(!!var1, !!var2, !!var3, !!var4) %>% 
    mutate_all(replace_na_and_integers)
}
library(dplyr)

# Create a sample dataframe
df <- data.frame(
  var1 = c(1, 2, 3),
  var2 = c(4, 5, 6),
  var3 = c(7, 8, 9)
)

# Vector of variable names to select
variables_to_select <- c("var1", "var3")

# Select variables based on the vector of variable names
selected_df <- df %>%
  select(one_of(variables_to_select))

# Print the selected dataframe
print(selected_df)
var1_vector <- c("v1_panss_sum_pos", "v1_panss_sum_neg", "v1_panss_sum_gen", "v1_panss_sum_tot", "v1_idsc_sum", "v1_ymrs_sum", "v1_gaf",
                 "v1_nrpsy_tmt_A_rt", "v1_nrpsy_tmt_A_err", "v1_nrpsy_tmt_B_rt", "v1_nrpsy_tmt_B_err", "v1_nrpsy_dgt_sp_frw", "v1_nrpsy_dgt_sp_bck", "v1_nrpsy_dg_sym",
                 "v1_nrpsy_mwtb")
var2_vector <- sub("^v1", "v2", var1_vector)
var3_vector <- sub("^v1", "v3", var1_vector)
var4_vector <- sub("^v1", "v4", var1_vector)


results <- 
  data %>% 
  filter(v1_stat == "CLINICAL") %>%
  mutate_all(~replace(., .==-999, NA)) %>% 
  {mapply(hist_of_differences, MoreArgs = list(data = .), var1 = var1_vector, var2 = var4_vector, SIMPLIFY = FALSE)}

Error in `select()`:
! Can't subset columns that don't exist.
✖ Column `v4_nrpsy_mwtb` doesn't exist.
Backtrace:
  1. ... %>% ...
 10. dplyr:::select.data.frame(., !!var1, !!var2)

data %>%
  mutate_all(~replace(., .==-999, NA)) %>% 
  filter(v1_stat == "CLINICAL") %>% 
  select(v1_age, v1_spec_emp, v1_disabl_pens, v1_wrk_abs_pst_5_yrs) %>% 
  filter(v1_age<65) %>% 
  # select(v1_age) %>%
  # pull %>%
  summary()
data.plot <-
data %>%
  filter(v1_stat == "CLINICAL") %>%
  # select(v1_id, matches("panss_sum|bdi2_sum")) %>%
  select(v1_id, matches("bdi2_sum")) %>% 
  rename(id = v1_id) %>% 
  pivot_longer(cols = starts_with("v"),
               names_to = c(".value", "test"),
               names_pattern = "^(v\\d+)_(.*)$",
               values_to = "value") %>% 
  filter(rowSums(is.na(.)) <= 2)
data.plot <-
data %>%
  filter(v1_stat == "CLINICAL", v1_age<25) %>%
  # select(v1_id, matches("panss_sum|bdi2_sum")) %>%
  select(v1_id, matches("bdi2_sum")) %>% 
  rename(id = v1_id) %>% 
  pivot_longer(cols = starts_with("v"),
               names_to = "timepoint",
               values_to = "value")
ggplot(data.plot, aes(x = timepoint, y = value, group = id, color = id)) +
  geom_path(show.legend = F) +
  theme_minimal() +
  labs(x = "Timepoint", y = "Value", title = "Line plot of data for 4 timepoints")

LS0tDQp0aXRsZTogIkluc3BlY3QgUHN5Q291cnNlIGRhdGEiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBTRVRVUC1QYWNrYWdlcywgZXZhbD1ULCBtZXNzYWdlPUZ9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KDQpgYGB7ciBTRVRVUC1DbGVhbi11cCwgZXZhbD1UfQ0KIyByZW1vdmUgYWxsIG9iamVjdHMgdG8gc3RhcnQgd2l0aCBjbGVhbiBlbnZpcm9ubWVudA0Kcm0obGlzdD1scygpKQ0KYGBgDQoNCmBgYHtyIERBVEEgTG9hZGluZ30NCmxvYWQoIlc6L2dyb3VwX3RyYW5zYmlvL2RhdGEvcHN5Y291cnNlLzIzMTEwN19Qc3lDb3Vyc2U2LjBfUGhlbm9fUHJvcG9zYWxfNjlfU2Nod2Fyei5SRGF0YSIpDQpkYXRhIDwtIHByb3ANCnJtKHByb3ApDQpgYGANCg0KYGBge3IgRlVOQ1RJT04gQ3JlYXRlIGhpc3RvZ3JhbSBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZpcnN0IGFuZCBsYXN0IHZpc2l0fQ0KaGlzdF9vZl9kaWZmZXJlbmNlcyA8LSBmdW5jdGlvbihkYXRhLCB2YXIxLCB2YXIyKSB7DQogIHZhcjEgPC0gZW5zeW0odmFyMSkgIA0KICB2YXIyIDwtIGVuc3ltKHZhcjIpDQogIGRhdGEgJT4lDQogICAgc2VsZWN0KCEhdmFyMSwgISF2YXIyKSAlPiUNCiAgICBmaWx0ZXIoY29tcGxldGUuY2FzZXMoLikpICU+JQ0KICAgIG11dGF0ZShuZWdfY2hhbmdlID0gISF2YXIxIC0gISF2YXIyKSAlPiUgDQogICAgcHVsbChuZWdfY2hhbmdlKSAlPiUgDQogICAgaGlzdChtYWluID0gcGFzdGUoIkhpc3RvZ3JhbSBvZiIsdmFyMSwgIi0iLHZhcjIpKQ0KfQ0KDQpyZXBsYWNlX25hX2FuZF9pbnRlZ2VycyA8LSBmdW5jdGlvbih4KSB7DQogICMgUmVwbGFjZSBOQSB3aXRoICItIg0KICB4W2lzLm5hKHgpXSA8LSAiLSINCiAgIyBSZXBsYWNlIGludGVnZXJzIHdpdGggIisiDQogIHhbIWlzLm5hKHgpICYgIWlzLm5hKGFzLm51bWVyaWMoeCkpICYgeCA9PSBhcy5pbnRlZ2VyKHgpXSA8LSAiKyINCiAgcmV0dXJuKHgpDQp9DQoNCg0KTWlzc2luZ19wYXR0ZXJuIDwtIGZ1bmN0aW9uKGRhdGEsIHZhcjEsIHZhcjIsIHZhcjMsIHZhcjQpIHsNCiAgdmFyMSA8LSBlbnN5bSh2YXIxKQ0KICB2YXIyIDwtIGVuc3ltKHZhcjIpDQogIHZhcjMgPC0gZW5zeW0odmFyMykNCiAgdmFyNCA8LSBlbnN5bSh2YXI0KQ0KICBkYXRhICU+JSANCiAgICBzZWxlY3QoISF2YXIxLCAhIXZhcjIsICEhdmFyMywgISF2YXI0KSAlPiUgDQogICAgbXV0YXRlX2FsbChyZXBsYWNlX25hX2FuZF9pbnRlZ2VycykNCn0NCmBgYA0KDQpgYGB7cn0NCnZhcjFfdmVjdG9yIDwtIGMoInYxX3BhbnNzX3N1bV9wb3MiLCAidjFfcGFuc3Nfc3VtX25lZyIsICJ2MV9wYW5zc19zdW1fZ2VuIiwgInYxX3BhbnNzX3N1bV90b3QiLCAidjFfaWRzY19zdW0iLCAidjFfeW1yc19zdW0iLCAidjFfZ2FmIiwNCiAgICAgICAgICAgICAgICAgInYxX25ycHN5X3RtdF9BX3J0IiwgInYxX25ycHN5X3RtdF9BX2VyciIsICJ2MV9ucnBzeV90bXRfQl9ydCIsICJ2MV9ucnBzeV90bXRfQl9lcnIiLCAidjFfbnJwc3lfZGd0X3NwX2ZydyIsICJ2MV9ucnBzeV9kZ3Rfc3BfYmNrIiwgInYxX25ycHN5X2RnX3N5bSIpDQp2YXIyX3ZlY3RvciA8LSBzdWIoIl52MSIsICJ2MiIsIHZhcjFfdmVjdG9yKQ0KdmFyM192ZWN0b3IgPC0gc3ViKCJedjEiLCAidjMiLCB2YXIxX3ZlY3RvcikNCnZhcjRfdmVjdG9yIDwtIHN1YigiXnYxIiwgInY0IiwgdmFyMV92ZWN0b3IpDQoNCmFsbF92ZWN0b3IgPC0gYyh2YXIxX3ZlY3RvciwgdmFyMl92ZWN0b3IsIHZhcjNfdmVjdG9yLCB2YXI0X3ZlY3RvcikNCg0KZGF0YV9tb2RpZmllZCA8LQ0KICBkYXRhICU+JQ0KICBtdXRhdGVfYWxsKH5pZmVsc2UoaXMubnVtZXJpYyguKSwgcmVwbGFjZSguLCAuID09IC05OTksIE5BKSwgLikpICU+JSANCiAgZmlsdGVyKHYxX3N0YXQgPT0gIkNMSU5JQ0FMIikgJT4lDQogIHNlbGVjdChvbmVfb2YoYWxsX3ZlY3RvcikpDQoNCiMgQ29tYmluZSB2YWx1ZXMgYWNyb3NzIHJvd3MgaW50byBhIHNpbmdsZSBwYXR0ZXJuDQpwYXR0ZXJucyA8LSBhcHBseShkYXRhX21vZGlmaWVkLCAxLCBwYXN0ZSwgY29sbGFwc2UgPSAiIikNCg0KcGF0dGVybl9jb3VudHMgPC0gdGFibGUocGF0dGVybnMpDQoNCiMgQ29udmVydCB0aGUgcmVzdWx0IHRvIGEgZGF0YSBmcmFtZQ0KcGF0dGVybl9jb3VudHNfZGYgPC0gYXMuZGF0YS5mcmFtZShwYXR0ZXJuX2NvdW50cykNCg0KIyBSZW5hbWUgY29sdW1ucyBmb3IgY2xhcml0eQ0KbmFtZXMocGF0dGVybl9jb3VudHNfZGYpIDwtIGMoIlBhdHRlcm4iLCAiRnJlcXVlbmN5IikNCg0KIyBQcmludCB0aGUgcmVzdWx0DQpwYXR0ZXJuX2NvdW50c19kZiAlPiUgDQogIG11dGF0ZShQZXJjZW50YWdlID0gRnJlcXVlbmN5L3N1bShGcmVxdWVuY3kpKjEwMCkgJT4lIA0KICBhcnJhbmdlKGRlc2MoUGVyY2VudGFnZSkpDQoNCmRwbHlyOjpyZWNvZGUoKQ0KDQpkYXRhX21vZGlmaWVkJA0KYGBgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIENyZWF0ZSBhIHNhbXBsZSBkYXRhZnJhbWUNCmRmIDwtIGRhdGEuZnJhbWUoDQogIHZhcjEgPSBjKDEsIDIsIDMpLA0KICB2YXIyID0gYyg0LCA1LCA2KSwNCiAgdmFyMyA9IGMoNywgOCwgOSkNCikNCg0KIyBWZWN0b3Igb2YgdmFyaWFibGUgbmFtZXMgdG8gc2VsZWN0DQp2YXJpYWJsZXNfdG9fc2VsZWN0IDwtIGMoInZhcjEiLCAidmFyMyIpDQoNCiMgU2VsZWN0IHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgdmVjdG9yIG9mIHZhcmlhYmxlIG5hbWVzDQpzZWxlY3RlZF9kZiA8LSBkZiAlPiUNCiAgc2VsZWN0KG9uZV9vZih2YXJpYWJsZXNfdG9fc2VsZWN0KSkNCg0KIyBQcmludCB0aGUgc2VsZWN0ZWQgZGF0YWZyYW1lDQpwcmludChzZWxlY3RlZF9kZikNCmBgYA0KDQoNCmBgYHtyfQ0KdmFyMV92ZWN0b3IgPC0gYygidjFfcGFuc3Nfc3VtX3BvcyIsICJ2MV9wYW5zc19zdW1fbmVnIiwgInYxX3BhbnNzX3N1bV9nZW4iLCAidjFfcGFuc3Nfc3VtX3RvdCIsICJ2MV9pZHNjX3N1bSIsICJ2MV95bXJzX3N1bSIsICJ2MV9nYWYiLA0KICAgICAgICAgICAgICAgICAidjFfbnJwc3lfdG10X0FfcnQiLCAidjFfbnJwc3lfdG10X0FfZXJyIiwgInYxX25ycHN5X3RtdF9CX3J0IiwgInYxX25ycHN5X3RtdF9CX2VyciIsICJ2MV9ucnBzeV9kZ3Rfc3BfZnJ3IiwgInYxX25ycHN5X2RndF9zcF9iY2siLCAidjFfbnJwc3lfZGdfc3ltIiwNCiAgICAgICAgICAgICAgICAgInYxX25ycHN5X213dGIiKQ0KdmFyMl92ZWN0b3IgPC0gc3ViKCJedjEiLCAidjIiLCB2YXIxX3ZlY3RvcikNCnZhcjNfdmVjdG9yIDwtIHN1YigiXnYxIiwgInYzIiwgdmFyMV92ZWN0b3IpDQp2YXI0X3ZlY3RvciA8LSBzdWIoIl52MSIsICJ2NCIsIHZhcjFfdmVjdG9yKQ0KDQoNCnJlc3VsdHMgPC0gDQogIGRhdGEgJT4lIA0KICBmaWx0ZXIodjFfc3RhdCA9PSAiQ0xJTklDQUwiKSAlPiUNCiAgbXV0YXRlX2FsbCh+cmVwbGFjZSguLCAuPT0tOTk5LCBOQSkpICU+JSANCiAge21hcHBseShoaXN0X29mX2RpZmZlcmVuY2VzLCBNb3JlQXJncyA9IGxpc3QoZGF0YSA9IC4pLCB2YXIxID0gdmFyMV92ZWN0b3IsIHZhcjIgPSB2YXI0X3ZlY3RvciwgU0lNUExJRlkgPSBGQUxTRSl9DQpwcmludChyZXN1bHRzKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0YSAlPiUNCiAgbXV0YXRlX2FsbCh+cmVwbGFjZSguLCAuPT0tOTk5LCBOQSkpICU+JSANCiAgZmlsdGVyKHYxX3N0YXQgPT0gIkNMSU5JQ0FMIikgJT4lIA0KICBzZWxlY3QodjFfYWdlLCB2MV9zcGVjX2VtcCwgdjFfZGlzYWJsX3BlbnMsIHYxX3dya19hYnNfcHN0XzVfeXJzKSAlPiUgDQogIGZpbHRlcih2MV9hZ2U8NjUpICU+JSANCiAgIyBzZWxlY3QodjFfYWdlKSAlPiUNCiAgIyBwdWxsICU+JQ0KICBzdW1tYXJ5KCkNCmBgYA0KDQpgYGB7cn0NCmRhdGEucGxvdCA8LQ0KZGF0YSAlPiUNCiAgZmlsdGVyKHYxX3N0YXQgPT0gIkNMSU5JQ0FMIikgJT4lDQogICMgc2VsZWN0KHYxX2lkLCBtYXRjaGVzKCJwYW5zc19zdW18YmRpMl9zdW0iKSkgJT4lDQogIHNlbGVjdCh2MV9pZCwgbWF0Y2hlcygiYmRpMl9zdW0iKSkgJT4lIA0KICByZW5hbWUoaWQgPSB2MV9pZCkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJ2IiksDQogICAgICAgICAgICAgICBuYW1lc190byA9IGMoIi52YWx1ZSIsICJ0ZXN0IiksDQogICAgICAgICAgICAgICBuYW1lc19wYXR0ZXJuID0gIl4odlxcZCspXyguKikkIiwNCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JSANCiAgZmlsdGVyKHJvd1N1bXMoaXMubmEoLikpIDw9IDIpDQoNCmBgYA0KDQpgYGB7cn0NCmRhdGEucGxvdCA8LQ0KZGF0YSAlPiUNCiAgZmlsdGVyKHYxX3N0YXQgPT0gIkNMSU5JQ0FMIiwgdjFfYWdlPDI1KSAlPiUNCiAgIyBzZWxlY3QodjFfaWQsIG1hdGNoZXMoInBhbnNzX3N1bXxiZGkyX3N1bSIpKSAlPiUNCiAgc2VsZWN0KHYxX2lkLCBtYXRjaGVzKCJiZGkyX3N1bSIpKSAlPiUgDQogIHJlbmFtZShpZCA9IHYxX2lkKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gc3RhcnRzX3dpdGgoInYiKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInRpbWVwb2ludCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAidmFsdWUiKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdncGxvdChkYXRhLnBsb3QsIGFlcyh4ID0gdGltZXBvaW50LCB5ID0gdmFsdWUsIGdyb3VwID0gaWQsIGNvbG9yID0gaWQpKSArDQogIGdlb21fcGF0aChzaG93LmxlZ2VuZCA9IEYpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh4ID0gIlRpbWVwb2ludCIsIHkgPSAiVmFsdWUiLCB0aXRsZSA9ICJMaW5lIHBsb3Qgb2YgZGF0YSBmb3IgNCB0aW1lcG9pbnRzIikNCmBgYA0KDQoNCg0KDQoNCg0K